#ifndef OSGPointTool_H
#define OSGPointTool_H

#include <osg/Geode>
#include <osgGe/Vec3d>
#include <osg/LineWidth>
#include <osgText/Text>
#include <osg/MatrixTransform>
#include <osg/LightSource>
#include <osg/Image>
#include <osg/Geometry>
#include <osgGe/Vec3>
#include <osgGe/Vec4>
#include <osg/Billboard>

#include <osg/Projection>

#include <OsgExTool/Export>

/**
 * @brief createBezier      贝塞尔曲线三个定位点,生成一系列点
 * @param p0    p0, p1, p2, 贝塞尔曲线三个定位点
 * @param p1
 * @param p2
 * @param num                num生成点的个数
 * @return
 */
extern "C" __declspec(dllexport) std::vector<osg::Vec3f>  createBezier(osg::Vec3f p0, osg::Vec3f p1, osg::Vec3f p2, int num = 10);

/**
 * @brief createNormalBill
 * @param center  圆心
 * @param radius  半径
 * @param colorss 输入颜色
 * @param c       输出颜色
 * @return
 */
 std::vector<osg::Vec3f> createNormalBill(osg::Vec3f center, double radius, osg::Vec4f colorss, std::vector<osg::Vec4d>& c);

/**
 * @brief justSmoothPoints 输入一系列点后,加密再返回一系列点,用于光滑线段
 * @param points           输入一系列点
 * @return                 返回一系列点
 */
 std::vector<osg::Vec3f> justSmoothPoints(std::vector<osg::Vec3f>& points);

/**
 * @brief getDivLineNum   把一系列点生成num个等间距的点
 * @param points          输入一系列点
 * @param num             输入划分的等间距的点的数目
 * @return
 */

 std::vector<osg::Vec3f> getDivLineNum(std::vector<osg::Vec3f>& points, int num);

/**
 * @brief getDivLineNumWindow 把一系列点生成num个等间距的点,输入点乘以矩阵mvp,先变换一次
 * @param points              输入一系列点
 * @param num                 输入划分的等间距的点的数目
 * @param mvp                 变换矩阵mvp
 * @return
 */
 std::vector<osg::Vec3f> getDivLineNumWindow(std::vector<osg::Vec3f>& points, int num, osg::Matrix mvp);


#endif


